home *** CD-ROM | disk | FTP | other *** search
/ Amiga Mag HDD Backup / Amiga Mag HDD Backup.zip / Amiga Mag HDD Backup / Alexander.img.bin / Alexander.img / tech 4.1 editorial Archive.sit / Nee / menu.i < prev    next >
Text File  |  1993-07-16  |  5KB  |  263 lines

  1. ;MENU.i
  2. ;menu equates
  3. menupick       equ  $100
  4. menuverify     equ  $2000
  5.  
  6. lowcommwidth   equ  $10
  7. commwidth      equ  $1b
  8. lowcheckwidth  equ  $0d
  9. checkwidth     equ  $13
  10.  
  11. menuenabled    equ  $1
  12. checkit        equ  $1
  13. itemtext       equ  $2
  14. commseq(       equ  $4
  15. menutoggle     equ  $8
  16. itemenabled    equ  $10
  17. highimage      equ  $0
  18. highcomp       equ  $40
  19. highbox        equ  $80
  20. highnone       equ  $c0
  21. checked        equ  $100
  22.  
  23. nomenu         equ  $1f
  24. noitem         equ  $3f
  25. nosub          equ  $1f
  26. menunull       equ  $ffff
  27. selectdown     equ  $68
  28. menudown       equ  $69
  29. selectup       equ  $e8
  30. menuup         equ  $e9
  31.  
  32. im.class       equ  $14
  33. im.code        equ  $18
  34. im.qualifier   equ  $1a
  35. im.iaddress    equ  $1c
  36. im.mousex      equ  $20
  37. im.mousey      equ  $22
  38. im.seconds     equ  $24
  39. im.micros      equ  $28
  40. im.idcmpwindow equ  $2c
  41. im.speciallink equ  $30
  42.  
  43. ;MACROS
  44. openmenu    macro    ;<menu0>
  45.    lea      \1,a1
  46.    movea.l  window(pc),a0
  47.    intlib   setmenustrip
  48.    endm
  49. closemenu   macro
  50.    movea.l  window(pc),a0
  51.    intlib   clearmenustrip
  52.    endm
  53.  
  54. cfm   macro ;check_for_message   <branch to if no message>
  55.    movea.l  window(pc),a0
  56.    move.l   #menunull,d0
  57.    intlib   onmenu
  58.    movea.l  window(pc),a0
  59.    movea.l  ww.userport(a0),a0
  60.    syslib   getmsg
  61.    tst.l    d0
  62.    beq      \1
  63.    movea.l  d0,a1
  64.    move.l   im.class(a1),d2   ;IDCMP flags
  65.    move.w   im.code(a1),d3    ;menu #
  66.    move.w   im.qualifier(a1),d4  ;rawkey code
  67.    movea.l  im.iaddress(a1),a0   ;gadget address
  68.    move.w   im.mousex(a1),d5  ;X coordinate
  69.    move.w   im.mousey(a1),d6  ;Y coordinate
  70.    syslib   replymsg
  71.    endm
  72.  
  73. eval_menunumber macro
  74.    moveq    #0,d0
  75.    moveq    #0,d1
  76.    moveq    #0,d2
  77.    move.w   d3,d0
  78.    move.w   d3,d1
  79.    move.w   d3,d2
  80.    andi.w   #31,d0   ; = menu #
  81.    lsr.w    #5,d1
  82.    andi.w   #63,d1   ; = item #
  83.    rol.w    #5,d2
  84.    andi.w   #31,d2   ; = sub-item #
  85.    endm
  86.  
  87. makemenu macro    ;<this menu,'Menu Title',next menu,left edge,enabled>
  88. \1
  89.    ifnc     '\3',''
  90.    dc.l     \3
  91.    endc
  92.    ifc      '\3',''
  93.    dc.l     0
  94.    endc
  95.    dc.w     \4,0,90,0,\5
  96.    dc.l     \1title
  97.    dc.l     \1item0
  98.    dc.w     0,0,0,0
  99.    evenpc
  100. \1title
  101.    dc.b     \2,0
  102.    evenpc
  103.    endm
  104.  
  105. makeitem macro    ;<this item,'Item Name',next item,top,$flags,$ME,
  106.                   ; 'Command Key',sub-item>
  107. \1
  108.    ifnc     '\3',''
  109.    dc.l     \3
  110.    endc
  111.    ifc      '\3',''
  112.    dc.l     0
  113.    endc
  114.    dc.w     0,\4,130+commwidth,10,\5
  115.    ifnc     '\6',''
  116.    dc.l     \6
  117.    endc
  118.    ifc      '\6',''
  119.    dc.l     0
  120.    endc
  121.    dc.l     \1itext,0
  122.    ifnc     '\7',''
  123.    dc.b     \7,0
  124.    endc
  125.    ifc      '\7',''
  126.    dc.b     0,0
  127.    endc
  128.    ifnc     '\8',''
  129.    dc.l     \8
  130.    endc
  131.    ifc      '\8',''
  132.    dc.l     0
  133.    endc
  134.    dc.w     0
  135.    evenpc
  136. \1itext
  137.    dc.b     1,0,2,0
  138.    dc.w     checkwidth,0
  139.    dc.l     0,\1name,0
  140.    evenpc
  141. \1name   dc.b  \2,0
  142.    evenpc
  143.    endm
  144.  
  145. makesubitem macro    ;<this subitem,'SubItemName',next subitem,top
  146.                      ; $flags,$ME,'CommandKey'>
  147. \1
  148.    ifnc     '\3',''
  149.    dc.l     \3
  150.    endc
  151.    ifc      '\3',''
  152.    dc.l     0
  153.    endc
  154.    dc.w     65,\4,130+commwidth,10,\5
  155.    ifnc     '\6',''
  156.    dc.l     \6
  157.    endc
  158.    ifc      '\6',''
  159.    dc.l     0
  160.    endc
  161.    dc.l     \1itext,0
  162.    ifnc     '\7',''
  163.    dc.b     \7,0
  164.    endc
  165.    ifc      '\7',''
  166.    dc.b     0,0
  167.    endc
  168.    dc.l     0
  169.    dc.w     0
  170.    evenpc
  171. \1itext
  172.    dc.b     1,0,2,0
  173.    dc.w     checkwidth,0
  174.    dc.l     0,\1name,0
  175.    evenpc
  176. \1name      dc.b  \2,0
  177.    evenpc
  178.    endm
  179.  
  180. ;gadget equates
  181. ;flags
  182. gadghcomp   equ   $0
  183. gadghbox    equ   $1
  184. gadghimage  equ   $2
  185. gadghnone   equ   $3
  186. gadgimage   equ   $4
  187. grelbottom  equ   $8
  188. grelright   equ   $10
  189. grelwidth   equ   $20
  190. grelheight  equ   $40
  191. selected    equ   $80
  192. gadgdisabled   equ   $100
  193.  
  194. ;activation
  195. relverify      equ   $1    ;IDCMP => GADGETUP
  196. gadgimmediate  equ   $2    ;IDCMP => GADGETDOWN
  197. endgadget      equ   $4
  198. followmouse    equ   $8
  199. rightborder    equ   $10
  200. leftborder     equ   $20
  201. topborder      equ   $40
  202. bottomborder   equ   $80
  203. toggleselect   equ   $100
  204. stringcenter   equ   $200
  205. stringright    equ   $400
  206. longint        equ   $800
  207. altkeymap      equ   $1000
  208. boolextend     equ   $2000
  209.  
  210. ;types
  211. boolgadget  equ   $1
  212. propgadget  equ   $3
  213. strgadget   equ   $4
  214. reqgadget   equ   $1000
  215. gzzgadget   equ   $2000
  216.  
  217. makestrgadget  macro       ;<this gadget,'GadgetName',next gadget,left edge,
  218.                            ; top edge,width,height,$flags,$activation,$ME,
  219.                            ; ID#,max characters>
  220. \1
  221.    ifnc  '\3',''
  222.    dc.l  \3
  223.    endc
  224.    ifc   '\3',''
  225.    dc.l  0
  226.    endc
  227.    dc.w  \4,\5,\6,\7,\8,\9,4
  228.    dc.l  \1border,0,\1itext,\10,\1info
  229.    dc.w  \11
  230.    dc.l  0
  231.    evenpc
  232. \1info
  233.    dc.l  \1buffer,\1undobuffer
  234.    dc.w  0,\12,0,0,0,0,0,0
  235.    dc.l  0,0,0
  236.    evenpc
  237. ;\1buffer ds.b  \12+1
  238. ;   evenpc
  239. \1undobuffer   ds.b  \12+1
  240.    evenpc
  241. \1border
  242.    dc.w  -2,-2
  243.    dc.b  1,0,0,5
  244.    dc.l  \1points,0
  245.    evenpc
  246. \1points
  247.    dc.w  0,0,\6+4,0,\6+4,\7+4,0,\7+4,0,0
  248.    evenpc
  249. \1itext
  250.    dc.b  3,0,1,0
  251.    dc.w  0,-11
  252.    dc.l  0,\1name,0
  253.    evenpc
  254. \1name
  255.    dc.b  \2,0
  256.    evenpc
  257.    endm
  258.  
  259. removegadgets  macro
  260.    movea.l  window(pc),a0
  261.    move.l   #0,62(a0)
  262.    endm
  263.